
from flask import Blueprint,request,jsonify,redirect
from application.models.users.user import *
from tools.myredis import r

course_blue = Blueprint("courseblue",__name__)

# 获取课程详情
@course_blue.route("/getDetail")
def getDetail():
    # 获取id
    id = request.args.get('id')
    userid = request.args.get('userid')
    # 查询课程信息
    course = Course.query.filter(Course.id==id).first()
    # 加入浏览记录，获取到userid
    if userid:
        key = 'collection'+str(userid)+'pro'+str(id)
        r.hash_add(key,'id',course.id)
        r.hash_add(key,'name',course.name)
    # 返回课程信息
    course = {"id":course.id,'name':course.name}
    return jsonify({
        "code":200,
        "course":course
    })


# 获取最近浏览
@course_blue.route('/getViews')
def getViews():
    # 获取id
    userid = request.args.get('userid')
    findkey = 'collection'+str(userid)+"*"
    gidlist = r.getvalues(findkey)
    reslist = []
    for i in gidlist:
        goods = r.getall_hash(i)
        dict = {}
        for k,v in goods.items():
            kk = k.decode()
            vv = v.decode()
            dict[kk] = vv
        reslist.append(dict)
    return jsonify({
        "code":200,
        "list":reslist
    })


# 加入购物车
@course_blue.route("/buy")
def buy():
    # 获取参数 userid courseid
    userid = request.args.get('userid')
    courseid = request.args.get('courseid')
    # 加减类型，默认为+
    type = 1
    try:
        type = request.args.get('type')
    except:
        pass
    # 从hash中获取数据，如果存在数量+1，
    key = 'buy' + str(userid)+'course'+str(courseid)
    # 如果不存在，存入redis hash
    flag = r.findkey_hash(key)
    print(flag)
    # 存在
    if flag:
        # 数量+1
        ff = r.jiajian_hash(key,'number',1,type)
        if ff == False:
            return jsonify({
                "code":10010,
                "mes":"不能再减"
            })
    else:
        r.hash_add(key,'id',courseid)
        r.hash_add(key,'number',1)
        # 选中
        r.hash_add(key, 'flag', True)
    # 返回结果
    return jsonify({
        "code":200,
        "mes":"加入成功"
    })


# 获取购物车
@course_blue.route('/mycart')
def mycart():
    # 获取参数userid
    userid = request.args.get('userid')
    # 从hash中获取商品id和数量
    key = 'buy'+str(userid)+"*"
    goods = r.getvalues(key)
    glist = []
    tmoney = 0
    tcount = 0
    if goods:
        for i in goods:
            # 获取每一条商品的具体信息
            good = r.getall_hash(i)
            rescourse = {}
            for k,v in good.items():
                params = k.decode()
                value = v.decode()
                if params == 'id':
                    # 获取到的商品信息
                    tcourse = Tcourse.query.filter(Tcourse.id == value).first()
                    rescourse['id'] = tcourse.id
                    rescourse['title'] = tcourse.title
                    rescourse['url'] = tcourse.url
                    rescourse['price'] = tcourse.price
                if params == 'number':
                    # 获取购买的数量
                    rescourse['number'] = value
            rescourse['total'] = int(rescourse['price'])*int(rescourse['number'])
            # 计算总价
            tmoney = float(tmoney)+float(rescourse['total'])
            tcount = int(tcount)+int(rescourse['number'])
            glist.append(rescourse)
    # 价格，图片，名字等从mysql中获取，从redis商品缓存中读取
    # 数据重组返回
    return jsonify({
        "code":200,
        "glist":glist,
        "tmoney":tmoney,
        "tcount":tcount
    })


# from job.task.mytask import task_one_function
# @course_blue.route('/testabc')
# def testabc():
#     res = task_one_function.delay(12,13)
#     print(res)
#     return jsonify({"code":200})


# 修改单个的选中状态
@course_blue.route('/modifyStatus')
def modifyStatus():
    # 如果true改为false，如果false改为true
    # 获取参数
    userid = request.args.get('userid')
    cid = request.args.get('cid')
    # 获取原来的状态判断
    key = 'buy'+str(userid)+'course'+str(cid)
    flag = r.getone_hash(key,'flag')
    # 设置默认选中
    cflag = 'True'
    if flag:
        flag = flag.decode()
        # 根据返回结果选中相反的值
        if flag == 'True':
            cflag = False
    r.hash_add(key,'flag',cflag)
    return jsonify({
        "code":200,
    })

